import frappe

def set_rate_from_item_price(doc, method=None):
    """
    从Excel导入Material Request时，按物料号匹配Item Price中勾选buying的记录，取price_list_rate赋值给rate
    逻辑：Excel物料号 → Item Price表（buying=1）→ price_list_rate → Material Request的rate
    """
    if not doc or not doc.items:
        frappe.log_error("无有效物料请求数据，跳过价格填充", "Material Request 调试信息")
        return

    for idx, item in enumerate(doc.items):
        row_num = idx + 1
        item_code = item.item_code

        if not item_code:
            frappe.log_error(f"第{row_num}行：物料号为空，无法获取价格", "Material Request 价格错误")
            continue

        # 1. 从Item Price表查询【勾选buying】的记录
        price_list_rate = get_buying_price_from_item_price(item_code)

        # 2. 赋值价格
        if price_list_rate is not None:
            item.rate = price_list_rate
            item.amount = item.qty * item.rate if item.qty else 0
            # frappe.log_error(
            #     f"第{row_num}行：物料[{item_code}]成功获取采购价格 → rate={price_list_rate}",
            #     "Material Request 调试信息"
            # )
        else:
            item.rate = None
            frappe.log_error(
                f"第{row_num}行：物料[{item_code}]在Item Price表中无【勾选buying】的记录，rate未赋值",
                "Material Request 价格错误"
            )


def get_buying_price_from_item_price(item_code):
    """
    从Item Price表查询指定物料号且【勾选buying】的price_list_rate
    条件：item_code匹配 + buying=1（仅采购价格）
    """
    if not item_code:
        return None

    return frappe.db.get_value(
        "Item Price",
        filters={
            "item_code": item_code,  # 匹配物料号
            "buying": 1  # 只勾选了buying的记录（排除selling）
        },
        fieldname="price_list_rate"
    )


# 可选：从Item表获取标准采购价格（如需作为备选）
def get_standard_buying_rate_from_item(item_code):
    if not item_code:
        return None
    return frappe.db.get_value("Item", item_code, "standard_rate")